﻿import java.awt.*;
import java.io.*;
import java.io.ObjectOutputStream.PutField;
import java.sql.*;
import java.sql.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import javax.swing.*;

public class Reception {
	public static JPanel ReceptionPanel = null;
	//// 赔付金额计数器
	public static int Pfc = 0; // 初始化赔付金额计数器
	// 价格计数器
	public static double cost = 0; // 初始化价格计数器
	// 输入框对象1-6
	public static JTextField textField1 = null;
	public static JTextField textField2 = null;
	public static JTextField textField3 = null;
	public static JTextField textField4 = null;
	public static JTextField textField5 = null;
	public static JTextField textField6 = null;

	public static void init() {
		System.out.println("前台管理初始化中...");
		ReceptionPanel = new JPanel();
		GridBagLayout grid1 = new GridBagLayout();// 定义布局对象
		ReceptionPanel.setLayout(grid1);// 布局
		GridBagConstraints g1 = new GridBagConstraints();// 定义约束对象
		g1.fill = GridBagConstraints.BOTH;
		g1.weightx = 0;
		g1.weighty = 0;
		ReceptionPanel.add(new JLabel("房 间 号 :"), g1);
		textField1 = new JTextField();// 创建文本框对象
		g1 = new GridBagConstraints();// 定义布局对象
		g1.fill = GridBagConstraints.HORIZONTAL;// 设置填充方式为水平方向
		g1.gridx = 1;// 设置x坐标为1
		g1.gridy = 0;// 设置y坐标为0
		g1.gridwidth = 3;// 横向占用3个格子
		ReceptionPanel.add(textField1, g1);// 添加文本框到弹窗中
		g1 = new GridBagConstraints();// 定义布局对象
		g1.fill = GridBagConstraints.HORIZONTAL;// 设置填充方式为水平方向
		g1.gridx = 0;
		g1.gridy = 1;
		ReceptionPanel.add(new JLabel("身份证号:"), g1);
		textField2 = new JTextField();// 创建文本框对象
		g1 = new GridBagConstraints();// 定义布局对象
		g1.fill = GridBagConstraints.HORIZONTAL;// 设置填充方式为水平方向
		g1.gridx = 1;// 设置x坐标为1
		g1.gridy = 1;// 设置y坐标为0
		g1.gridwidth = 3;// 横向占用3个格子
		ReceptionPanel.add(textField2, g1);// 添加文本框到弹窗中
		g1 = new GridBagConstraints();// 定义布局对象
		g1.fill = GridBagConstraints.HORIZONTAL;// 设置填充方式为水平方向
		g1.gridx = 0;
		g1.gridy = 2;
		ReceptionPanel.add(new JLabel("姓   名   :"), g1);
		textField3 = new JTextField();// 创建文本框对象
		g1 = new
		GridBagConstraints();// 定义布局对象
		g1.fill = GridBagConstraints.HORIZONTAL;// 设置填充方式为水平方向
		g1.gridx = 1;// 设置x坐标为1
		g1.gridy = 2;// 设置y坐标为0
		g1.gridwidth = 3;// 横向占用3个格子
		ReceptionPanel.add(textField3, g1);// 添加文本框到弹窗中
		g1 = new GridBagConstraints();// 定义布局对象
		g1.fill = GridBagConstraints.HORIZONTAL;// 设置填充方式为水平方向
		g1.gridx = 0;
		g1.gridy = 3;
		ReceptionPanel.add(new JLabel("入住时间:"), g1);
		textField4 = new JTextField();// 创建文本框对象
		g1 = new GridBagConstraints();// 定义布局对象
		g1.fill = GridBagConstraints.HORIZONTAL;// 设置填充方式为水平方向
		g1.gridx = 1;// 设置x坐标为1
		g1.gridy = 3;// 设置y坐标为0
		g1.gridwidth = 3;// 横向占用3个格子
		ReceptionPanel.add(textField4, g1);// 添加文本
		g1 = new GridBagConstraints();// 定义布局对象
		g1.fill = GridBagConstraints.HORIZONTAL;// 设置填充方式为水平方向
		g1.gridx = 0;
		g1.gridy = 4;
		ReceptionPanel.add(new JLabel("入住日期:"), g1);
		textField5 = new JTextField();// 创建文本框对象
		g1 = new GridBagConstraints();// 定义布局对象
		g1.fill = GridBagConstraints.HORIZONTAL;// 设置填充方式为水平方向
		g1.gridx = 1;// 设置x坐标为1
		g1.gridy = 4;// 设置y坐标为0
		g1.gridwidth = 3;// 横向占用3个格子
		ReceptionPanel.add(textField5, g1);// 添加文本
		g1 = new GridBagConstraints();// 定义布局对象
		g1.fill = GridBagConstraints.HORIZONTAL;// 设置填充方式为水平方向
		g1.gridx = 0;
		g1.gridy = 5;
		ReceptionPanel.add(new JLabel("押   金   :"), g1);
		textField6 = new JTextField();// 创建文本框对象
		g1 = new GridBagConstraints();// 定义布局对象
		g1.fill = GridBagConstraints.HORIZONTAL;// 设置填充方式为水平方向
		g1.gridx = 1;// 设置x坐标为1
		g1.gridy = 5;// 设置y坐标为0
		g1.gridwidth = 3;// 横向占用3个格子
		ReceptionPanel.add(textField6, g1);// 添加文本
		// 添加按钮（入住和退房）
		JButton button1 = new JButton("入住");// 创建按钮对象
		g1 = new GridBagConstraints();// 定义布局对象
		g1.fill = GridBagConstraints.HORIZONTAL;// 设置填充方式为水平方向
		g1.gridx = 0;
		g1.gridy = 6;
		g1.gridwidth = 2;
		button1.setPreferredSize(new Dimension(80, 25));// 设置按钮大小
		ReceptionPanel.add(button1, g1);
		JButton button2 = new JButton("退房");// 创建按钮对象
		g1 = new GridBagConstraints();// 定义布局对象
		g1.fill = GridBagConstraints.HORIZONTAL;// 设置填充方式为水平方向
		g1.gridx = 2;
		g1.gridy = 6;
		g1.gridwidth = 2;
		button2.setPreferredSize(new Dimension(80, 25));// 设置按钮大小
		ReceptionPanel.add(button2, g1);
		JButton button3 = new JButton("获取当前日期和空闲房间");// 创建按钮对象
		g1 = new GridBagConstraints();// 定义布局对象
		g1.fill = GridBagConstraints.HORIZONTAL;// 设置填充方式为水平方向
		g1.gridx = 0;
		g1.gridy = 7;
		g1.gridwidth = 4;
		ReceptionPanel.add(button3, g1);
		JButton button4 = new JButton("根据ID获取其余数据");// 创建按钮对象
		g1 = new GridBagConstraints();// 定义布局对象
		g1.fill = GridBagConstraints.HORIZONTAL;// 设置填充方式为水平方向
		g1.gridx = 0;
		g1.gridy = 8;
		g1.gridwidth = 4;
		ReceptionPanel.add(button4, g1);
		// 添加按钮事件监听器
		button1.addActionListener(e -> {
			// 入住按钮事件处理代码
			// 检查是否存在未填写的输入框，如果有则弹出提示框
			if (textField1.getText().isEmpty() || textField2.getText().isEmpty() || textField3.getText().isEmpty()
					|| textField4.getText().isEmpty() || textField5.getText().isEmpty() || textField6.getText().isEmpty()) {
				JOptionPane.showMessageDialog(null, "请填写所有信息！", "错误", JOptionPane.ERROR_MESSAGE);
				return;
			}
			// 获取输入框的值
			String roomNumber = textField1.getText();// 获取房间号
			String idCard = textField2.getText();// 获取身份证号
			String name = textField3.getText();// 获取姓名
			String checkInTime = textField4.getText();// 获取入住时间
			String checkInDate = textField5.getText();// 获取入住日期
			double deposit = Double.parseDouble(textField6.getText());// 获取押金
			System.out.println("入住操作已触发");
			System.out.println("房间号: " + roomNumber);
			System.out.println("身份证号: " + idCard);
			System.out.println("姓名: " + name);
			System.out.println("入住时间: " + checkInTime);
			System.out.println("入住日期: " + checkInDate);
			System.out.println("押金: " + deposit);
			// 检查ID是否冲突SELECT * FROM HotelSysteam.lodging WHERE RoomID = ***如果能查到，则说明冲突
			try {
				Statement stmt = Main.conn.createStatement();
				ResultSet rs = stmt.executeQuery("SELECT * FROM HotelSysteam.lodging WHERE RoomID = '" + roomNumber + "'");
				if (rs.next()) {
					JOptionPane.showMessageDialog(null, "该房间已被占用，请选择其他房间！", "错误",
							JOptionPane.ERROR_MESSAGE);
				} else {
					// 插入数据到数据库
					stmt.executeUpdate("INSERT INTO `HotelSysteam`.`lodging` (`RoomID`, `IDcard`, `UserName`, `Time`, `Date`, `Deposit`) VALUES ('" + roomNumber + "', '" + idCard + "', '" + name + "', '" + checkInTime + "', '" + checkInDate + "', '" + deposit + "')");
					JOptionPane.showMessageDialog(null, "入住成功！", "提示", JOptionPane.INFORMATION_MESSAGE);
				}

			} catch (SQLException e1) {
				System.err.println("数据库连接失败！");
				e1.printStackTrace();
			} catch (Exception e1) {
				System.err.println("未知错误！");
				e1.printStackTrace();
			} 
			// 刷新房间信息
			RoomManagement.UpdateRoomData();// 刷新房间信息
		});
		button2.addActionListener(e1 -> {
			// 退房按钮事件处理代码
			// 检查房间号是否存在，如果不存在则弹出提示框
			if (textField1.getText().isEmpty()) {
				JOptionPane.showMessageDialog(null, "请先选择房间！", "错误", JOptionPane.ERROR_MESSAGE);
				return;
			}
			int roomNumber = Integer.parseInt(textField1.getText());// 获取房间号，并将其转换为整型
			System.out.println("退房操作已触发");
			// 检查房间号是否存在SELECT * FROM HotelSysteam.lodging WHERE RoomID = ***如果能查到，则说明存在
			try {
				Statement stmt = Main.conn.createStatement();
				ResultSet rs = stmt.executeQuery("SELECT * FROM HotelSysteam.lodging WHERE RoomID = " + roomNumber);
				if (rs.next()) {
					// 询问是否确认退房
					System.out.println("房间号: " + roomNumber);
					int confirm = JOptionPane.showConfirmDialog(null, "确认退房吗？", "提示", JOptionPane.YES_NO_OPTION);
					if (confirm != 0) {
						System.out.println("取消退房操作");
						return;
					}
					System.out.println("确认退房操作");
					// 将查询到的内容读取出来IDcard UserName Time Date Deposit
					String idCard = rs.getString("IDcard");// 获取身份证号
					String userName = rs.getString("UserName");// 获取姓名
					Time time = rs.getTime("Time");// 获取入住时间
					Date date = rs.getDate("Date");// 获取入住日期
					int deposit = rs.getInt("Deposit");// 获取押金
					// 根据获取到的ID查房间价格SELECT * FROM HotelSysteam.room WHERE RoomID = ***
					ResultSet rs2 = stmt.executeQuery("SELECT * FROM HotelSysteam.Room WHERE ID = " + roomNumber);
					rs2.next();// 移动到第一行
					int price = rs2.getInt("Price");// 获取房间价格
					System.out.println("房间号: " + roomNumber);
					System.out.println("身份证号: " + idCard);
					System.out.println("姓名: " + userName);
					System.out.println("入住时间: " + time);
					System.out.println("入住日期: " + date);
					System.out.println("押金: " + deposit);
					System.out.println("房间价格: " + price);
					// 计算费用(房间价格 * 入住天数 - 押金)使用Unix Timestamp时间戳格式
					long currentUnixTimestamp = System.currentTimeMillis()/1000L; // 获取当前时间戳（秒）
					// 将入住时间转换为秒时间戳
					long InTime2 = date.getTime();
					InTime2 += time.getTime();
					InTime2 /= 1000; // 将毫秒时间戳转换为秒时间戳
					// 计算差值
					long InTime = currentUnixTimestamp - InTime2; // 计算入住时间与当前时间的差值（秒）
					InTime -= 28800; // 减去8小时，修复时区问题
					System.out.println("入住时间戳: " + InTime);
					double days = InTime / 86400.0; // 计算入住天数，86400秒=1天
					System.out.println("入住天数: " + String.format("%.2f", days));
					cost = price * days - deposit; // 计算费用
					// 四舍五入到两位小数
					cost = Math.round(cost * 100) / 100.0;
					System.out.println("费用: " + cost);
					// 询问是否执行报损处理
					int confirm2 = JOptionPane.showConfirmDialog(null, "是否有物品发生损坏或消耗？", "提示", JOptionPane.YES_NO_OPTION);
					if (confirm2 == 0) {
						System.out.println("有物品发生损坏或消耗");
						// 弹窗询问哪些数据发生了损坏或消耗，并写入到数据库中
						// 弹窗内三个文本框（ID，名称，数量），两个按钮（添加，结束）
						JFrame frame = new JFrame("报损处理");
						GridBagLayout grid2 = new GridBagLayout();// 定义布局对象
						frame.setLayout(grid2);
						// 窗口大小为300*200屏幕居中
						frame.setSize(300, 200);
						frame.setLocationRelativeTo(null);// 窗口居中
						GridBagConstraints c = new GridBagConstraints();// 定义约束对象
						c.fill = GridBagConstraints.HORIZONTAL;// 设置填充方式为水平方向
						c.gridx = 0;// 设置当前控件的x坐标
						c.gridy = 0;// 设置当前控件的y坐标
						JLabel label1 = new JLabel("ID");// 创建标签，并设置文本内容为"ID"
						frame.add(label1, c);// 将标签添加到窗口中
						c.gridx = 1;// 设置当前控件的x坐标
						c.gridy = 0;// 设置当前控件的y坐标
						JTextField textField7 = new JTextField();// 创建文本框
						frame.add(textField7, c);// 将文本框添加到窗口中
						c.gridx = 0;// 设置当前控件的x坐标
						c.gridy = 1;// 设置当前控件的y坐标
						JLabel label2 = new JLabel("名称");// 创建标签，并设置文本内容为"名称"
						frame.add(label2, c);// 将标签添加到窗口中
						c.gridx = 1;// 设置当前控件的x坐标
						c.gridy = 1;// 设置当前控件的y坐标
						JTextField textField8 = new JTextField();// 创建文本框
						frame.add(textField8, c);// 将文本框添加到窗口中
						c.gridx = 0;// 设置当前控件的x坐标
						c.gridy = 2;// 设置当前控件的y坐标
						JLabel label3 = new JLabel("数量");// 创建标签，并设置文本内容为"数量"
						frame.add(label3, c);// 将标签添加到窗口中
						c.gridx = 1;// 设置当前控件的x坐标
						c.gridy = 2;// 设置当前控件的y坐标
						JTextField textField9 = new JTextField();// 创建文本框
						frame.add(textField9, c);// 将文本框添加到窗口中
						c.gridx = 0;// 设置当前控件的x坐标
						c.gridy = 3;// 设置当前控件的y坐标
						JButton button5 = new JButton("添加");// 创建按钮，并设置文本内容为"添加"
						JButton button6 = new JButton("结束");// 创建按钮，并设置文本内容为"结束"
						frame.add(button5, c);// 将按钮添加到窗口中
						c.gridx = 1;// 设置当前控件的x坐标
						c.gridy = 3;// 设置当前控件的y坐标
						frame.add(button6, c);// 将按钮添加到窗口中
						frame.setVisible(true);// 设置窗口为可见状态
						Pfc=0;// 初始化Pfc为0，用于判断是否已经添加过损坏物品

						button5.addActionListener(e -> {
							// 获取ID
							int id = -1;
							// 检查ID是否填写，如果没有则使用名称查找ID
							if (textField7.getText().isEmpty()) {
								// 使用名称查找ID
								// 检查文本框是否为空
								if (textField8.getText().isEmpty()) {
									System.err.println("请填写物品名称或ID！");
									return;
								}
								String name = textField8.getText(); // 获取文本框中的内容
								try {
									ResultSet rs3 = stmt.executeQuery("SELECT * FROM HotelSysteam.Goods WHERE Name = '" + name + "'");
									// 检查是否有结果
									if (!rs3.next()) {
										System.err.println("未找到物品！");
										return;
									}
									id = rs3.getInt("ID"); // 获取ID
									rs3.close(); // 关闭ResultSet对象
								} catch (SQLException e2) {
									System.err.println("数据库连接失败！");
									e2.printStackTrace();
								}
							} else {
								// 直接使用ID
								id = Integer.parseInt(textField7.getText()); // 将文本框中的内容转换为整数
							}
							System.out.println("ID: " + id);
							// 获取数量
							// 检查文本框是否为空
							if (textField9.getText().isEmpty()) {
								System.err.println("请填写数量！");
								return;
							}

							int quantity = Integer.parseInt(textField9.getText()); // 将文本框中的内容转换为整数
							// 写入损坏表RoomID GoodsID Quantity
							try {
								stmt.executeUpdate("INSERT INTO `HotelSysteam`.`Damage` (`RoomID`, `GoodsID`, `Quantity`) VALUES ('" + roomNumber + "', '" + id + "', '" + quantity + "')");
							} catch (SQLException e2) {
								System.err.println("数据库连接失败！");
								e2.printStackTrace();
							} catch (NumberFormatException e2) {
								System.err.println("数量输入错误！");
								e2.printStackTrace();
							} catch (Exception e2) {
								System.err.println("未知错误！");
								e2.printStackTrace();
							}
							// 计算赔付金额
							try {
								ResultSet rs3 = stmt.executeQuery("SELECT * FROM HotelSysteam.Goods WHERE ID = '" + id + "'");
								// 检查是否有结果
								if (!rs3.next()) {
									System.err.println("未找到物品！");
									return;
								}
								int pfprice = rs3.getInt("Price"); // 获取价格
								// 检查是否获取成功
								if (pfprice == 0) {
									System.err.println("价格获取失败！");
									return;
								}
								Pfc += pfprice * quantity; // 计算赔付金额
								
								System.out.println("赔付金额: " + Pfc); // 输出赔付金额
								// 相应库存减少
								// 先判断库存是否足够
								int qty = rs3.getInt("Quantity") - quantity; // 计算剩余数量
								// 如果低于20个，则发出警告
								if (qty < 20 && qty >= 0) {
									System.out.println("低库存告警！剩余数量: " + qty); // 输出低库存告警信息
									JOptionPane.showMessageDialog(null, "低库存告警！剩余数量: " + qty, "警告", JOptionPane.WARNING_MESSAGE); // 弹出对话框提示低库存告警信息
								}
								// 库存不足处理
								if (qty < 0) {
									System.err.println("库存不足！");
									// 弹出对话框提示库存不足
									JOptionPane.showMessageDialog(null, "库存不足！\n记录可能异常\n请及时补充库存", "警告", JOptionPane.WARNING_MESSAGE);
									// 将相关的物品数量设置为0
									stmt.executeUpdate("UPDATE `HotelSysteam`.`Goods` SET `Quantity` = 0 WHERE ID = " + id);
								}
								else stmt.executeUpdate("UPDATE `HotelSysteam`.`Goods` SET `Quantity` = `Quantity` - '" + quantity + "' WHERE ID = " + id);
								rs3.close(); // 关闭ResultSet对象
							} catch (SQLException e2) {
								System.err.println("数据库发生错误");
								e2.printStackTrace();
							} catch (Exception e2) {
								System.err.println("未知错误！");
								e2.printStackTrace();
							}
							// 清空文本框
							textField7.setText(""); // 清空文本框中的内容
							textField8.setText(""); // 清空文本框中的内容
						});

						button6.addActionListener(e -> {
							// 关闭窗口
							frame.dispose();
							// 输出最终收费金额
							System.out.println("最终收费金额: " + (Pfc+cost)); // 输出最终收费金额
							// 弹窗显示最终收费金额,如果是负数则代表退款()
							JOptionPane.showMessageDialog(null, "最终收费金额: " + (Pfc+cost), "信息", JOptionPane.INFORMATION_MESSAGE);


							try {
								stmt.close();
							} catch (SQLException e2) {
								System.err.println("数据库连接失败！");
								e2.printStackTrace();
							} // 关闭Statement对象

						});
						// 生成账单，写入Checkout费用等信息IDcard UserName RoomID Time Date Reparations billing
						currentUnixTimestamp*=1000;// 将时间戳转换为毫秒
						date = new Date(currentUnixTimestamp); // 获取当前日期
						time = new Time(currentUnixTimestamp); // 获取当前时间
						// 写入Checkout表(记得减去押金，押金需要退还给客人，所以需要减去押金)
						stmt.executeUpdate("INSERT INTO `HotelSysteam`.`Checkout` (`IDcard`, `UserName`, `RoomID`, `Time`, `Date`, `Reparations`, `billing`) VALUES ('" + idCard + "', '" + userName + "', '" + roomNumber + "', '" + time.toString() + "', '" + date.toString() + "', '" + Pfc + "', '" + (Pfc+cost+deposit) + "')");
					} else {
						// 没有报损信息，直接执行退房操作
						System.out.println("没有报损信息，直接执行退房操作");
						// 弹窗显示最终收费金额
						JOptionPane.showMessageDialog(null, "最终收费金额: " + (cost+deposit), "信息", JOptionPane.INFORMATION_MESSAGE);
						// 获取当时间戳
						currentUnixTimestamp*=1000;// 将时间戳转换为毫秒
						date = new Date(currentUnixTimestamp); // 获取当前日期
						time = new Time(currentUnixTimestamp); // 获取当前时间
						// 写入Checkout表(和上面差不多，但报损为0)
						stmt.executeUpdate("INSERT INTO `HotelSysteam`.`Checkout` (`IDcard`, `UserName`, `RoomID`, `Time`, `Date`, `Reparations`, `billing`) VALUES ('" + idCard + "', '" + userName + "', '" + roomNumber + "', '" + time.toString() + "', '" + date.toString() + "', '0', '" + (cost+deposit) + "')");
					}
					// 删除数据从数据库中
					stmt.executeUpdate("DELETE FROM `HotelSysteam`.`lodging` WHERE `RoomID` = " + roomNumber);
					// 刷新房间信息
					RoomManagement.UpdateRoomData();// 刷新房间信息
				} else 
				JOptionPane.showMessageDialog(null, "该房间已空闲，请选择其他房间！", "错误",JOptionPane.ERROR_MESSAGE);
			} catch (SQLException e) {
				System.err.println("数据库连接失败！");
				e.printStackTrace();
			} catch (Exception e) {
				System.err.println("未知错误！");
				e.printStackTrace();
			}
		});
		button3.addActionListener(e2 -> {
			// 获取当前日期和空闲房间按钮事件处理代码
			// 获取当时间戳
			long currentTimeMillis = System.currentTimeMillis();// 获取当前时间戳
			// 转换为日期和时间(字符串形式)并写入文本框中
			Date date = new Date(currentTimeMillis); // 获取当前日期
			Time time = new Time(currentTimeMillis); // 获取当前时间
			textField5.setText(date.toString());// 将当前日期转换为字符串形式，并写入到文本框中
			textField4.setText(time.toString());// 将当前时间转换为字符串形式，并写入到文本框中
			System.out.println("当前日期: " + date);
			System.out.println("当前时间: " + time);
			// 获取空闲房间,在RoomManagement.java中有该数据，直接调用即可
			// 如果原本就有数据则不用重新获取
			if (textField1.getText().isEmpty()) {
				int freeRooms = RoomManagement.firstEmptyRoomID;// 获取空闲房间的ID
				System.out.println("空闲房间ID: " + freeRooms);
				textField1.setText(String.valueOf(freeRooms));// 将空闲房间的ID转换为字符串形式，并写入到文本框中
			}
		});
		button4.addActionListener(e3 -> {
			GetRoomInfo();
		});
	}
	// 查询某房间的入住信息
	public static void GetRoomInfo() {
		// 根据房间号获取房间住户信息，并写入文本框中
		try {
			// 检查房间号是否为空
			if (textField1.getText().isEmpty()) {
				System.out.println("房间号为空！"); // 输出提示信息
				JOptionPane.showMessageDialog(null, "房间号为空！", "错误", JOptionPane.ERROR_MESSAGE); // 弹窗显示提示信息
				return;
			}
			// 获取房间号并转换为整数类型
			int roomNumber = Integer.parseInt(textField1.getText()); // 将文本框中的内容转换为整数类型，并获取房间号
			System.out.println("房间号: " + roomNumber); // 输出房间号信息
			Statement stmt = Main.conn.createStatement();
			ResultSet rs = stmt.executeQuery("SELECT * FROM `HotelSysteam`.`lodging` WHERE RoomID = '" + roomNumber + "'"); // 根据房间号查询住户信息
			if (rs.next()) { // 如果查询到数据
				String idCard = rs.getString("IDcard");// 获取身份证号
				String userName = rs.getString("UserName");// 获取姓名
				Time time = rs.getTime("Time");// 获取入住时间
				Date date = rs.getDate("Date");// 获取入住日期
				int deposit = rs.getInt("Deposit");// 获取押金
				System.out.println("身份证号: " + idCard); // 输出身份证号信息
				System.out.println("姓名: " + userName); // 输出姓名信息
				System.out.println("入住时间: " + time); // 输出入住时间信息
				System.out.println("入住日期: " + date); // 输出入住日期信息
				System.out.println("押金: " + deposit); // 输出押金信息
				textField2.setText(idCard);// 将身份证号写入到文本框中
				textField3.setText(userName);// 将姓名写入到文本框中
				textField4.setText(time.toString());// 将入住时间写入到文本框中
				textField5.setText(date.toString());// 将入住日期写入到文本框中
				textField6.setText(String.valueOf(deposit));// 将押金写入到文本框中
			} else {
				System.out.println("该房间无住户信息！"); // 如果没有查询到数据，则输出提示信息
				// 清空除房间号外其它的文本框
				textField2.setText("");// 清空身份证号文本框
				textField3.setText("");// 清空姓名文本框
				textField4.setText("");// 清空入住时间文本框
				textField5.setText("");// 清空入住日期文本框
				textField6.setText("");// 清空押金文本框

			}
			rs.close(); // 关闭ResultSet对象
			stmt.close(); // 关闭Statement对象
		} catch (SQLException e) {
			System.err.println("数据库连接失败！");
			e.printStackTrace();
		} catch (NumberFormatException e) 
		{
			System.err.println("房间号格式错误！");
			JOptionPane.showMessageDialog(null, "房间号格式错误！", "错误", JOptionPane.ERROR_MESSAGE); // 弹窗显示提示信息
			e.printStackTrace();
		}
		catch (Exception e) {
			System.err.println("未知错误！");
			e.printStackTrace();
		}
	}
	// 重载GetRoomInfo()方法，传入房间号参数
	// 实现该方法是因为外部程序需要直接传入房间号，而无需用户手动输入
	public static void GetRoomInfo(int roomNumber) {
		textField1.setText(String.valueOf(roomNumber)); // 将房间号写入到文本框中
		GetRoomInfo(); // 调用无参的GetRoomInfo()方法
	}
}